/**
 * 逻辑、功能相关描述:客服事件状态机服务
 *
 * @author yandawei 编写日期：2008-12-15
 */
package com.ce.pms.custservice.service;

import com.ce.pms.custservice.model.CustServiceEventDO;
import com.ce.pms.custservice.vo.CustServiceEventVO;

/**
 * @author yandawei
 *
 */
public interface ICustEventStateMachineService {

	/**
	 * 功能描述: 提醒客户端是否要回访 <br>
	 *
	 * @param csEvent
	 * @return Create author:yandawei <br>
	 *         Create on:2008-12-15 <br>
	 *         Edit author: <br>
	 *         Edit on: <br>
	 *         Why: <br>
	 */
	public boolean remindReturnVisit(CustServiceEventDO csEvent);

	/**
	 * 功能描述: 提醒客户端是否要求阅签<br>
	 *
	 * @param csEvent
	 * @return Create author:yandawei <br>
	 *         Create on:2008-12-15 <br>
	 *         Edit author: <br>
	 *         Edit on: <br>
	 *         Why: <br>
	 */
	public boolean remindSignReading(CustServiceEventDO csEvent);

	/**
	 * 功能描述: 根据新建的事件有效状态,设置客服事件各个状态的跃迁.
	 * 1.事件状态
	 *   a.如果事件状态是有效或待定,设置事件状态新建:EventStatuz=001
	 *   b.如果事件无效,设置事件状态待归档:EventStatuz=004
	 * 2.回访状态
	 * 3.阅签状态<br>
	 *
	 * @param csEvent
	 *            Create author:yandawei <br>
	 *            Create on:2008-12-15 <br>
	 *            Edit author: <br>
	 *            Edit on: <br>
	 *            Why: <br>
	 */
	public void decideAllStatuzWithAddCSEvent(CustServiceEventDO csEvent);

	/**
	 * 功能描述: 根据修改后的事件有效状态,设置客服事件各个状态的跃迁.
			1.事件状态
  			a. 当csEventDO.EventStatuz=001, 同时csEventVO.validity=000
     			 时设置客服事件状态待归档:csEventDO.EventStatuz=004

  			b. 当csEventDO.EventStatuz=004, 同时csEventVO.validity=001或
     			 csEventVO.validity=002时设置事件状态新建:csEventDO.EventStatuz=001
  			d. 不符合上面条件,异常退出并提示客户不能再做修改.
	 *
	 * @param csEventVO
	 * @param csEventDO
	 *            Create author:yandawei <br>
	 *            Create on:2008-12-15 <br>
	 *            Edit author: <br>
	 *            Edit on: <br>
	 *            Why: <br>
	 */
	public void decideALLStatuzWithEditCSEvent(CustServiceEventVO csEventVO,
			CustServiceEventDO csEventDO);

	/**
	 * 功能描述: <br>
	 * 客服手动触发事件状态已完成,根据业务规则判断所有状态跃迁:
	 * 0.如果事件关联的提交的任务有未完工的,则异常退出并提示用户"先把派工单/提交任务处理完...".
	 * 1.事件状态
	 *   (1)步骤1
	 *     a.设置事件状态为已完成EventStatuz=003.
	 *   (2)步骤2
	 *     a.如果本事件按回访规则，不要回访，并且，按阅签规则，也不要阅签，则设置事件状态为待归档EventStatuz=004。
	 * 2.回访状态
	 *   a.如果事件状态为已完工EventStatuz=003,并且按回访规则，要回访，则设置回访状态为待回访returnVisitStatuz=001
	 * 3.阅签状态
	 *   a.如果事件状态为已完工EventStatuz=003,回访状态为空，并且按照阅签规则，要阅签，则设置阅签状态为待阅签reviwerStatuz=001
	 *
	 * @param csEventDO
	 *            Create author:yandawei <br>
	 *            Create on:2008-12-15 <br>
	 *            Edit author: <br>
	 *            Edit on: <br>
	 *            Why: <br>
	 */
	public void decideAllStatuzWithComplete(CustServiceEventDO csEventDO);

	/**
	 * 功能描述: 客服助理登记回访，根据业务规则，设置事件状态跃迁状态。
	 * 业务规则:
	 * 1.回访状态
		a.如果事件状态为已完成EventStatuz=003或EventStatuz=004, 设置回访状态为已回访 returnVisitStatuz=002
		否则异常退出并提示用户"目前不能做回访".
	   2.阅签状态
		a.如果事件状态为已完成EventStatuz=003并且阅签状态reviwerStatuz为空,当按照阅签规则要阅签时，
		则设置阅签状态为待阅签 reviwerStatuz=001
	   3.事件状态
		a.当事件状态为已完成EventStatuz=003,并且阅签状态reviwerStatuz为空,则设置事件状态为待归档EventStatuz=004.  <br>
	 *
	 * @param csEvent
	 *            Create author:yandawei <br>
	 *            Create on:2008-12-15 <br>
	 *            Edit author: <br>
	 *            Edit on: <br>
	 *            Why: <br>
	 */
	public void decideAllStatuzWithAddReturnVisit(CustServiceEventDO csEvent);

	/**
	 * 功能描述: 领导阅签，根据业务规则，设置事件状态跃迁状态。
	 * 业务规则:
	 * 1.阅签状态
		a.当事件状态为已完成EventStatuz=003或者EventStatuz=004, 并且阅签状态reviwerStatuz!=002,
		则设置reviwerStatuz=002,否则异常退出并提示用户"当前不能阅签."
	   2.事件状态
		a.当事件状态为已完成EventStatuz=003,则设置事件状态为待归档EventStatuz=004.<br>
	 *
	 * @param csEvent
	 *            Create author:yandawei <br>
	 *            Create on:2008-12-15 <br>
	 *            Edit author: <br>
	 *            Edit on: <br>
	 *            Why: <br>
	 */
	public void decideAllStatuzWithAddSignReading(CustServiceEventDO csEvent);


	/**
	 * 功能描述: 是否允许事件完工 <br>
	 * @param csEvent
	 * @return
	 * Create author: 王浩羽 <br>
	 * Create on:Dec 26, 2008  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public Boolean isAllowManualTriggerComplete(CustServiceEventDO csEvent);

	/**
	 * 功能描述:  当发生撤销提交任务时,设置事件的状态跃迁.业务规则<br>
			1.当事件状态为已完工EventStatuz=003时,异常退出并提示用户"不允许再撤销任务."<br>
			2. 当事件状态还是已提交EventStatuz=002时,并且事件再没有其他有效的关联任务并且任务状<br>
				态为Statuz=001或者002,那么设置EventStatuz=001,否则退出.<br>
	 *
	 * Create author:yandawei <br>
	 * @param csEvent
	 * Create on:2008-12-29  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public void resetEStatuzByRevokeSubmitTask(Long taskID, CustServiceEventDO csEvent);
}
